package br.com.sms.action;

import java.util.List;

import br.com.sms.dominio.Cliente;
import br.com.sms.dto.ClienteDTO;
import br.com.sms.enuns.UF;
import br.com.sms.util.Mensagens;

public class ClienteAction extends Action{
	private static final long serialVersionUID = 6418463621061033358L;

	private Cliente cliente;
	private ClienteDTO clienteDTO;
	private List<Cliente> clientes;
	private List<UF> ufs;
	
	/**
	 * Redireciona para tela de Pesquisa de Clientes
	 * @return
	 */
	public String telaPesquisarClientes(){
		setMenuAtual(MENU_CLIENTES);
		apresentarErros();
		apresentarMensagens();
		
		ufs = UF.getListaUF();
		
		return TELA_PESQUISAR_CLIENTES;
	}

	/**
	 * Redireciona para a tela de Salvar Cliente
	 * @return
	 */
	public String telaSalvarCliente(){
		ufs = UF.getListaUF();
		
		return TELA_SALVAR_CLIENTE;
	}
	
	/**
	 * Salva um cliente de acordo com os dados preenchido no formulario
	 * @return
	 */
	public String salvar(){
		clienteDTO.setCliente(cliente);
		getClienteFacade().salvar(clienteDTO);
		
		mensagens.put("mensagem", Mensagens.CLIENTE_SALVO_SUCESSO);
		cliente = null;
		
		return telaPesquisarClientes();
	}

	public String excluir(){
		getClienteFacade().excluir(cliente);
		
		mensagens.put("mensagem", Mensagens.CLIENTE_EXCLUIDO_SUCESSO);
		return telaPesquisarClientes();
	}
	
	/**
	 * Realiza a pesquisa de clientes de acordo com os dados informados na tela
	 * @return
	 */
	public String pesquisar(){
		clienteDTO.setCliente(cliente);
		
		clientes = getClienteFacade().pesquisar(clienteDTO);
		getRequest().setAttribute("clientes", clientes);
		
		if(clientes.size() == 0){
			mensagens.put("mensagem", Mensagens.NENHUM_REGISTRO_ENCONTRADO);
		}
		
		return telaPesquisarClientes();
	}
	
	
	public String recuperarTodos(){
		clientes = getClienteFacade().recuperarTodos();
		getRequest().setAttribute("clientes", clientes);
		return telaPesquisarClientes();
	}
	
	public String editar(){
		setMenuAtual(MENU_CLIENTES);
		
		if(cliente != null && cliente.getId() > 0){
			cliente = getClienteFacade().recuperarCliente(cliente.getId());
			clienteDTO = new ClienteDTO();
			clienteDTO.setCidade(cliente.getCidade().getNome());
			clienteDTO.setUf(cliente.getCidade().getUf());
		}
		
		return telaSalvarCliente();
	}
	
	
	/*
	 * getters and setters 
	 */
	public Cliente getCliente() {
		return cliente;
	}
	
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<UF> getUfs() {
		return ufs;
	}

	public void setUfs(List<UF> ufs) {
		this.ufs = ufs;
	}

	public ClienteDTO getClienteDTO() {
		return clienteDTO;
	}

	public void setClienteDTO(ClienteDTO clienteDTO) {
		this.clienteDTO = clienteDTO;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}
}
